package cdma2000.onex.evdo.reva.sessionlayer;

/**
 *
 * UATI可有长结构和短结构两种形式。
 * 长结构UATI是长度为128位的AT地址标识，可用来唯一标识地址会话。
 * 128位的UATI由两部分组成：UATI104和UATI024，其中UATI024是会话管理和移植性管理（SC/MM）功能模块分配的，
 * UATI104可能和AT请求UATI时所处的扇区标识的高104位（即SectorID[127:24]）相同，也可能不同。
 * 在同一个子网内，UATI024可用来区分不同的AT，而属于不同子网的UATI024可以相同。
 * AT可从扇区消息中获得扇区标识和子网掩码，通过扇区标识和子网掩码进行逻辑与计算获得子网地址，
 * 当该子网地址与AT的UATI和子网掩码按比特与的结果不同时，表示进入了一个新的子网。
 * UATI32使用8位的色码来作为子网地址的别名。网络运营商有一个ColorCode分配方案以保证相邻扇区的ColorCode不会相同。
 * AT可以通过UATIAssignment消息和QuickConfig消息来获得ColorCode。
 * AT与AN都要保存Colorcode与子网地址的映射表，AT中除了保存UATI32以外，还要保存UATI128。
 */
public class UnicastATI {

    private byte ColorCode;
    private byte[] UATI128;

    public UnicastATI(byte[] UATI104, byte[] UATI024, byte ColorCode) throws InvalidUATILengthException {
        if(UATI104.length != 13 || UATI024.length != 3) throw new InvalidUATILengthException();
        this.UATI128 = new byte[16];
        System.arraycopy(UATI104, 0, this.UATI128, 0, 13);
        System.arraycopy(UATI024, 0, this.UATI128, 13, 3);
        this.ColorCode = ColorCode;
    }

    public UnicastATI(byte[] UATI128, byte ColorCode) throws InvalidUATILengthException{
        if(UATI128.length != 16) throw new InvalidUATILengthException();
        this.UATI128 = new byte[16];
    }
}
